#ifndef _F_LCD_GUI_H_
#define _F_LCD_GUI_H_
#include "stdint.h"
#include <stdint.h>

#define RGB_TO_COLOR16(r, g, b) (((r>>3)<<11)+((g>>2)<<5)+(b>>3))
typedef struct 
{
	uint16_t *buf1;
	uint16_t LCD_WIDE;
	uint16_t LCD_HIGH;
}F_GUI;

typedef struct
{
    uint8_t r;
    uint8_t g;
    uint8_t b;
} rgb_color_t;


void Gui_Refresh(void);
void gui_clear_ram(void); //清空数组为黑屏

/*刷新函数*/
void Gui_draw_cache_picture(uint16_t x,uint16_t y,uint16_t length,uint16_t high,const void *p);
void Gui_refresh_any_area(uint16_t x ,uint16_t y,uint16_t length,uint16_t high);
void gui_center_diffuse_refresh(uint16_t style);
/*画图函数*/
void Gui_Gear_Circle_Bresenham(uint16_t X,uint16_t Y,uint16_t R,uint16_t fc);//实心圆
void Gui_Circle_math(uint16_t x0 ,uint16_t y0 ,uint16_t R ,uint16_t color);
void Gui_DrawLine_Bresenham(uint16_t x0, uint16_t y0,uint16_t x1, uint16_t y1,uint16_t Color);//画线函数，使用Bresenham 画线算法
void Gui_DrawLine(uint16_t x0 ,uint16_t y0 ,uint16_t x1,uint16_t y1,uint8_t dot,uint16_t color);//dot 是划线点的间隔，1为实线

void Drawarc(int x,int y,int a,int b,uint16_t r,uint16_t c);
void DrawArcRect(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2,uint16_t r,uint32_t c);

void gui_color_fill(uint16_t color);
void lcd_draw_solid_rectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);

void gui_show_pic(uint16_t x,uint16_t y,uint16_t pic_w,uint16_t pic_h,uint8_t *p);
/*
解析图片，将图片任意位置矩形，拷贝要缓存数组上
x,y:显示起始位置坐标
pic_w,pic_h:解析图片的宽高
pic_src_x,pic_src_y ：解析图片矩形的坐标
pic_src_w，pic_src_h:解析图片矩形的宽高
*/
void gui_show_pic_any(uint16_t x, uint16_t y,uint16_t pic_w, uint16_t pic_h,uint16_t pic_src_x, uint16_t pic_src_y,   
uint16_t pic_src_w, uint16_t pic_src_h,const uint8_t *p);

void gui_show_pic_turn(uint16_t x,uint16_t y,uint16_t pic_w,uint16_t pic_h,
uint16_t rotate,uint16_t center_x,uint16_t center_y, uint8_t *p);

/*字库函数*/
void gui_show_num16_one(uint8_t x,uint16_t y,uint16_t num,uint16_t fore_color,uint16_t back_color);
void gui_show_num_uint(uint8_t x,uint16_t y,uint32_t num,uint16_t fore_color,uint16_t back_color);
void gui_show_num16_2(uint8_t x,uint16_t y,uint16_t num,uint16_t fore_color,uint16_t back_color);
void gui_show_volume_num(uint8_t x,uint16_t y,uint16_t num,uint16_t fore_color,uint16_t back_color,uint8_t vol_step_120_on);

void gui_show_char16(uint16_t  x,uint16_t y,uint8_t font,uint16_t fore_color,uint16_t back_color);
void gui_show_string16(uint16_t  x,uint16_t y,const uint8_t *font,uint8_t font_num,uint16_t fore_color,uint16_t back_color);

void gui_show_char16x24(uint16_t  x,uint16_t y,uint8_t font,uint16_t fore_color,uint16_t back_color);
void gui_show_string16x24(uint16_t  x,uint16_t y, uint8_t *font,uint8_t font_num,uint16_t fore_color,uint16_t back_color);
void gui_show_char16x22(uint16_t  x,uint16_t y,uint8_t font,uint16_t fore_color,uint16_t back_color);
void gui_show_string16x22(uint16_t  x,uint16_t y, uint8_t *font,uint8_t font_num,uint16_t fore_color,uint16_t back_color);

void ld_send_hd_text_data(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t *data, uint16_t data_length, uint16_t* color_list, uint16_t color_list_len);
void ld_send_hd_text_data_ez(uint16_t x, uint16_t y,const uint8_t *data, uint16_t data_length, uint16_t* color_list);
// void ld_hd_text_color_list_calc(uint16_t* color_list, uint16_t color_list_len, uint16_t text_color, uint16_t background_color);


void f_lcd_color_fill(uint16_t color);

void f_gui_init(void);
void f_gui_delete(void);
void f_lcd_draw_point(uint16_t x,uint16_t y ,uint16_t color);
void f_lcd_clear_ram(void);
void f_lcd_refresh(void);

#endif
